package proceso.carga.regionRiego;

import hibernate.HibernateUtil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.hibernate.Session;

import proceso.carga.sector.LectorPoligonal;

import modelo.regionRiego.RegionRiego;
import modelo.serieterreno.SerieTerreno;
import modelo.zonariego.ZonaRiego;

public class CargaZonaRiego {

	private RegionRiego region;
	private List<ZonaRiego> listaZona = new ArrayList<ZonaRiego>();
	private String error = "";
	public RegionRiego getRegion() {
		return region;
	}
	public void setRegion(RegionRiego region) {
		this.region = region;
	}
	public List<ZonaRiego> getListaZona() {
		return listaZona;
	}
	public void setListaZona(List<ZonaRiego> listaZona) {
		this.listaZona = listaZona;
	}
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}
	
	public boolean cargar(String nombreArchivo, String directorio, RegionRiego region, Session sess){
		File arch;
		FileReader lectorArch;
		BufferedReader lectorBuffer;
		StringTokenizer tokens;
		String nombreArchZona;
		String nombreZona;
		String linea;
		String nombreRegion;
		int contArchivos;
		int arcNro = 0;
		boolean resultado;
		

		
		arch = new File(nombreArchivo);
		try {

			
			lectorArch = new FileReader(arch);
			lectorBuffer = new BufferedReader(lectorArch);
			linea = lectorBuffer.readLine();
			System.out.println(" linea " + linea);
			tokens = new StringTokenizer(linea,",");
			nombreRegion = tokens.nextToken();
			contArchivos = Integer.parseInt(tokens.nextToken().trim());
			
			while(lectorBuffer.ready()){
				linea = lectorBuffer.readLine();
				tokens = new StringTokenizer(linea,",");
				nombreArchZona = directorio+"/"+tokens.nextToken();
				nombreZona = tokens.nextToken();
				System.out.println("archivo " + arcNro +nombreArchZona+ " zona: " + nombreZona);
				arcNro++;
				LectorPoligonal lector = new LectorPoligonal();
				resultado = lector.leer(nombreArchZona);
				if(resultado){
					ZonaRiego zona = new ZonaRiego();
					zona.inicializarListaPoligonal();
					zona.setNombre(nombreZona);
					for(int i=0; i<lector.getListaPoligonal().size(); i++){
						zona.agregarPoligonal(lector.getListaPoligonal().get(i));
						lector.getListaPoligonal().get(i).setZonaRiego(zona);
					}
					region.agregarZona(zona);
					zona.setRegionRiego(region);
					listaZona.add(zona);
				}
				else {
					error += "No se cargo la serie corresondiente a " + nombreZona +"\n";
					System.out.println("error "+error + " dato de lector " +lector.getError());
				}
			}
			sess.update(region);
			for(int i=0; i<listaZona.size(); i++) {
				sess.save(listaZona.get(i));
				sess.flush();
				sess.clear();
			}

		} catch (FileNotFoundException e) {
			error = "Archivo no encontrado";
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			error = "Error de lectura en archivo";
			e.printStackTrace();
			return false;
		}
		if(arcNro != contArchivos) {
			error += "el nro de archivos es distinto al especificado";
			return false;
		}


		return true;
	}
}
